package a09_ChangeLuomaNum;

import java.security.PublicKey;
import java.util.Scanner;

/**
 * @Author quan
 * @Description 转换罗马数字
 * 要求：键盘录入字符串,长度小于等于9,并且只能为数字。将其转换为罗马数字。
 * 注意：罗马数字没有0,如果输入的数字有0则变为“ ”(长度为0的字符串)
 * @Date 2023/1/30 23:42
 */
public class TestDemo {
    public static void main(String[] args) {
        //1、键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        String str;
        while (true) {
            System.out.println("请输入要转化的内容：");
            str = sc.next();
            //2、进行字符串的安全校验(两点)
            boolean flag = checkstr(str);
            if (flag) {
                break;
            } else {
                System.out.println("输入格式有误,请重新输入！");
                continue;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int number = c-48;//注意点3：c-48或者c-'0'将获取的字符串的每一个字符数字'1'转换为int类型的数字1
            //调用转换罗马数字方法
            String result = changeLuoma(number);
//            System.out.println(result);
            sb.append(result);
        }
        System.out.println(sb);
    }

    public static String changeLuoma(int number){
        //3、查表法转换数字为罗马数字
        //注意点2：定义一个数组，让索引和罗马数字产生交互。将罗马数字定义为字符数组进行存储,索引要从0开始。
        String[] arr = {" ","I","II","III","IV","V","VI","VII","VIII","IX"};
        //遍历这个字符数组,传进来的参数str进行遍历，遍历的str的索引号刚好对应数组的罗马数字，并进行返回
        return arr[number];
    }

    public static boolean checkstr(String str){
        if(str.length()>9){
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            //注意点1：获取字符串的每一个字符,利用ASSIC值将？
            char c = str.charAt(i);
            if(c>'9' || c<'0'){
                return false;
            }
        }
        return true;
    }
}
